﻿using TalentDesk.Contracts.Ef;
using TalentDesk.Contracts.ServiceContracts;
using TalentDesk.Mvc.Models;
using SharedContracts.Types;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace TalentDesk.Mvc.HelperClasses
{
    public static class CacheHelper
    {
        private static Dictionary<string, object> localCache;

        static CacheHelper()
        {
            localCache = new Dictionary<string, object>();
            new ProxyHelper<ICacheService>().Use(serviceProxy =>
            {
                try
                {
                    localCache.Add("CacheProjectTypes", serviceProxy.GetProjectTypes());
                    //localCache.Add("CacheTarifeGrup", serviceProxy.GetCachedTarifeGrup());
                    //localCache.Add("CacheUnipedeKodu", serviceProxy.GetCachedUnipedeKodu());
                    //localCache.Add("CacheBankalar", serviceProxy.GetCachedBankalar());
                    //localCache.Add("CacheIsletmeler", serviceProxy.GetCachedIsletmeler());
                    //localCache.Add("CacheSayacMarkalar", serviceProxy.GetCachedSayacMarkalar());
                    //localCache.Add("CacheFizikselDurum", serviceProxy.GetCachedFizikselDurum());
                    //localCache.Add("CacheHareketTipleri", serviceProxy.GetCachedHareketTipleri());
                    //localCache.Add("CacheThkTurleri01", serviceProxy.GetCachedThkTurleri01());
                    //localCache.Add("CacheThkTurleri02", serviceProxy.GetCachedThkTurleri02());
                    //localCache.Add("CacheThkKalemler", serviceProxy.GetCachedThkKalemler());
                    //localCache.Add("CacheThsTurleri01", serviceProxy.GetCachedThsTurleri01());
                    //localCache.Add("CacheThsTurleri02", serviceProxy.GetCachedThsTurleri02());
                    //localCache.Add("CacheTrafoMarkalar", serviceProxy.GetCachedTrafoMarkalar());
                    //localCache.Add("CacheKacakTurleri", serviceProxy.GetCachedKacakTurleri());
                    //localCache.Add("CacheAnaAboneGrubu", serviceProxy.GetCachedAnaAboneGrubu());
                    //localCache.Add("CacheIller", serviceProxy.GetCachedIller());
                }
                catch (Exception ex)
                {
                    System.Diagnostics.EventLog.WriteEntry("CbeLight", ex.ToString(), System.Diagnostics.EventLogEntryType.Error);
                    throw ex;
                }

            },
               EndpointConstants.BasicHttpBinding_ICacheService);
        }

        public static IEnumerable GetCacheItem(string key)
        {
            return (IEnumerable)localCache[key];
        }



        public static List<ProjectType> GetProjectTypes()
        {
            return ((List<ProjectType>)localCache["CacheProjectTypes"]);
        }

        public static ProjectType GetProjectTypesById(int Id)
        {
            return ((List<ProjectType>)localCache["CacheProjectTypes"]).Where(p => p.ProjectTypeId == Id).FirstOrDefault();
        }
        //public static string GetTaliTarifeAdi(int key)
        //{
        //    int tarifeGrupNo = ((List<TarifeGrup>)localCache["CacheTarifeGrup"]).Where(p => p.TarifeGrupUN == key).Select(p => p.TarifeGrupNo).Single();
        //    string tarifeAdi = ((List<TaliTarifeGrubu>)localCache["CacheTaliTarifeGrubu"]).Where(p => p.TarifeGrupNo == tarifeGrupNo).Select(p => p.Aciklama).Single();
        //    return tarifeAdi;
        //}

        //public static string GetIlAdi(string key)
        //{
        //    return ((List<Il>)localCache["CacheIller"]).Where(p => p.IlKodu == Convert.ToInt16(key)).Select(p => p.IlAdi).SingleOrDefault();
        //}

        //public static string GetUnipedeAdi(string key)
        //{
        //    return ((List<UnipedeKodlari>)localCache["CacheUnipedeKodu"]).Where(p => p.UnipedeKodu == key).Select(p => p.UnipedeAdi).SingleOrDefault();
        //}

        //public static string GetBankaAdi(string key)
        //{
        //    return ((List<Bankalar>)localCache["CacheBankalar"]).Where(p => p.BankaKodu == key).Select(p => p.BankaAdi).SingleOrDefault();
        //}

        //public static string GetIsletmeKodu(int key)
        //{
        //    return ((List<Isletmeler>)localCache["CacheIsletmeler"]).Where(p => p.IsletmeKodu == key).Select(p => p.IlKodu.ToString() + "." +
        //        p.IlBolgeKodu.ToString() + "." +
        //        p.IlceKodu.ToString() + "." +
        //        p.KasabaKodu.ToString() + "." +
        //        p.KoyKodu.ToString()).SingleOrDefault();
        //}

        //public static string GetIsletmeAdi(int ilKodu, int ilBolgeKodu, int ilceKodu, int kasabaKodu, int koyKodu)
        //{
        //    string result = ((List<Isletmeler>)localCache["CacheIsletmeler"]).Where(p => p.IlKodu == ilKodu && p.IlBolgeKodu == ilBolgeKodu && p.IlceKodu == ilceKodu && p.KasabaKodu == kasabaKodu && p.KoyKodu == koyKodu)
        //        .Select(p => p.IsletmeAdi).SingleOrDefault();

        //    return result == null ? "Tanımsız işletme" : result;
        //}

        //public static int GetIsletmeKey(int ilKodu, int ilBolgeKodu, int ilceKodu, int kasabaKodu, int koyKodu)
        //{
        //    int result = ((List<Isletmeler>)localCache["CacheIsletmeler"]).Where(p => p.IlKodu == ilKodu && p.IlBolgeKodu == ilBolgeKodu && p.IlceKodu == ilceKodu && p.KasabaKodu == kasabaKodu && p.KoyKodu == koyKodu)
        //        .Select(p => p.IsletmeKodu).SingleOrDefault();

        //    return result == null ? 0 : result;
        //}

        //public static Isletmeler GetIsletmeFrom5(int ilKodu, int ilBolgeKodu, int ilceKodu, int kasabaKodu, int koyKodu)
        //{
        //    Isletmeler result = ((List<Isletmeler>)localCache["CacheIsletmeler"]).Where(p => p.IlKodu == ilKodu && p.IlBolgeKodu == ilBolgeKodu && p.IlceKodu == ilceKodu && p.KasabaKodu == kasabaKodu && p.KoyKodu == koyKodu).SingleOrDefault();

        //    return result;
        //}

        //public static string GetSayacMarkaAdi(int key)
        //{
        //    return ((List<SayacMarkalar>)localCache["CacheSayacMarkalar"]).Where(p => p.SayacMarkaID == key).Select(p => p.MarkaAd).SingleOrDefault();
        //}

        //public static string GetSayacEnerjiOlcumCinsi(int key)
        //{
        //    string result = string.Empty;
        //    int nAktif = key / 8;
        //    key = key - (nAktif * 8);
        //    int nEnduktif = key / 4;
        //    key = key - (nEnduktif * 4);
        //    int nKapasitif = key / 2;
        //    key = key - (nKapasitif * 2);
        //    int nDemand = key;

        //    result += (nAktif == 1) ? "Aktif " : "";
        //    result += (nEnduktif == 1) ? "Endüktif " : "";
        //    result += (nKapasitif == 1) ? "Kapasitif " : "";
        //    result += (nDemand == 1) ? "Demand " : "";
        //    return result;
        //}

        //public static string GetSayacZaman(int key)
        //{
        //    string result = string.Empty;
        //    int nAktif = key / 49;
        //    key = key - (nAktif * 49);
        //    int nEnduktif = key / 7;
        //    key = key - (nEnduktif * 7);
        //    int nKapasitif = key;

        //    result += (nAktif > 0) ? "Aktif : " + nAktif.ToString() + " " : "";
        //    result += (nEnduktif > 0) ? "Endüktif : " + nEnduktif.ToString() + " " : "";
        //    result += (nKapasitif > 0) ? "Kapasitif : " + nKapasitif.ToString() + " " : "";
        //    return result;
        //}

        //public static string GetFizikselDurumAciklama(int key)
        //{
        //    return ((List<FizikselDurum>)localCache["CacheFizikselDurum"]).Where(p => p.FizikselDurumID == key).Select(p => p.Aciklama).SingleOrDefault();
        //}


        //public static string GetHareketTipiAciklama(int key)
        //{
        //    return ((List<HareketTipleri>)localCache["CacheHareketTipleri"]).Where(p => p.HareketCinsi == key).Select(p => p.Aciklama).SingleOrDefault();
        //}

        //public static string GetThkTurleri01Aciklama(int key)
        //{
        //    return ((List<ThkTurleri01>)localCache["CacheThkTurleri01"]).Where(p => p.ThkTurKod == key).Select(p => p.Aciklama).SingleOrDefault();
        //}
        //public static string GetThkTurleri02Aciklama(int key)
        //{
        //    return ((List<ThkTurleri02>)localCache["CacheThkTurleri02"]).Where(p => p.ThkTurKod == key).Select(p => p.Aciklama).SingleOrDefault();
        //}
        //public static string GetThkKalemAciklama(int key)
        //{
        //    return ((List<ThkKalemler>)localCache["CacheThkKalemler"]).Where(p => p.ThkKalemKod == key).Select(p => p.KalemAdi).SingleOrDefault();
        //}
        //public static string GetThsTurleri01Aciklama(int key)
        //{
        //    return ((List<ThsTurleri01>)localCache["CacheThsTurleri01"]).Where(p => p.ThsTurKod == key).Select(p => p.Aciklama).SingleOrDefault();
        //}
        //public static string GetThsTurleri02Aciklama(int key)
        //{
        //    return ((List<ThsTurleri02>)localCache["CacheThsTurleri02"]).Where(p => p.ThsTurKod == key).Select(p => p.Aciklama).SingleOrDefault();
        //}
        //public static string GetTrafoMarkasi(int key)
        //{
        //    return ((List<TrafoMarkalar>)localCache["CacheTrafoMarkalar"]).Where(p => p.TrafoMarkaID == key).Select(p => p.MarkaAdi).SingleOrDefault();
        //}
        //public static string GetKacakTuru(int key)
        //{
        //    return ((List<KacakTurleri>)localCache["CacheKacakTurleri"]).Where(p => p.KacakTurKod == key).Select(p => p.Aciklama).SingleOrDefault();
        //}
        //public static string GetAnaAboneGrubu(int key)
        //{
        //    return ((List<AnaAboneGrubu>)localCache["CacheAnaAboneGrubu"]).Where(p => p.AboneGrupNo == key).Select(p => p.Aciklama).SingleOrDefault();
        //}

        //public static List<ThsTurleri01> GetThsTurleri01()
        //{
        //    return ((List<ThsTurleri01>)localCache["CacheThsTurleri01"]).ToList();
        //}
        //public static List<ThsTurleri02> GetThsTurleri02()
        //{
        //    return ((List<ThsTurleri02>)localCache["CacheThsTurleri02"]).ToList();
        //}
        //public static List<Bankalar> GetBankalar()
        //{
        //    return ((List<Bankalar>)localCache["CacheBankalar"]).ToList();
        //}

        //public static List<SayacMarkalar> GetSayacMarkalar()
        //{
        //    return ((List<SayacMarkalar>)localCache["CacheSayacMarkalar"]).ToList();
        //}



        //// Raporlar için 
        //public static List<ThsTurleri01> GetThsTurleri01ForRapor()
        //{
        //    List<ThsTurleri01> lTur = new List<ThsTurleri01>();
        //    ((List<ThsTurleri01>)localCache["CacheThsTurleri01"]).ForEach(p => lTur.Add(p));
        //    lTur.Add(new ThsTurleri01 { ThsTurKod = 100, Aciklama = "Tümü" });
        //    return lTur;
        //}
        //public static List<ThsTurleri02> GetThsTurleri02ForRapor()
        //{
        //    List<ThsTurleri02> lTur = new List<ThsTurleri02>();
        //    ((List<ThsTurleri02>)localCache["CacheThsTurleri02"]).ForEach(p => lTur.Add(p));
        //    lTur.Add(new ThsTurleri02 { ThsTurKod = 100, Aciklama = "Tümü" });
        //    return lTur;
        //}


        //Bu kısım sedaş için yazıldı orada şuan cache yapısı yok eklendiğin de değiştirilebilinir
        //public static string GetBilgilendirmeTuruAciklama(int key)
        //{
        //    return AdresServiceProxy.GetBilgilendirmeTuru(key).BilgilendirmeTuru;
        //}
    }
}